package com.lishe.lishe.lishe.utils;

import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Toast;

import com.lishe.lishe.lishe.base.BaseApplication;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ImageUtils {

    static Context context;

    public ImageUtils(Context context) {
        this.context = context;
    }

    /**
     * 获取全部图片地址
     *
     * @return
     */
    public ArrayList<String> listAlldir() {
        Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        ArrayList<String> list = new ArrayList<String>();
        String[] proj = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_TAKEN};
        Cursor cursor = context.getContentResolver().query(uri, proj, null, null, MediaStore.Images.Media.DATE_TAKEN);//managedQuery(uri, proj, null, null, null);
        while (cursor.moveToNext()) {
            String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
            String path0 = new File(path).getAbsolutePath();
            list.add(path0);
        }
        return list;
    }

    public List<FileObject> LocalImgFileList() {
        List<FileObject> data = new ArrayList<FileObject>();
        List<String> allimglist = listAlldir();//所有图片的地址

        //按照时间排序
        for (int j = 0; j < allimglist.size(); j++) {
            FileObject file = new FileObject();
            file.setFilename(getfileinfo(allimglist.get(j)));
            file.setFilePath(allimglist.get(j));
            file.getFilecontent().add(allimglist.get(j));
            data.add(file);
        }
        return data;
    }

    //显示原生图片尺寸大小
    public Bitmap getPathBitmap(Uri imageFilePath, int dw, int dh) throws FileNotFoundException {
        //获取屏幕的宽和高
        /**
         * 为了计算缩放的比例，我们需要获取整个图片的尺寸，而不是图片 
         * BitmapFactory.Options类中有一个布尔型变量inJustDecodeBounds，将其设置为true 
         * 这样，我们获取到的就是图片的尺寸，而不用加载图片了。 
         * 当我们设置这个值的时候，我们接着就可以从BitmapFactory.Options的outWidth和outHeight中获取到值 
         */
        BitmapFactory.Options op = new BitmapFactory.Options();
        op.inJustDecodeBounds = true;
        //由于使用了MediaStore存储，这里根据URI获取输入流的形式    
        Bitmap pic = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(imageFilePath),
                null, op);

        int wRatio = (int) Math.ceil(op.outWidth / (float) dw); //计算宽度比例
        int hRatio = (int) Math.ceil(op.outHeight / (float) dh); //计算高度比例

        /**
         * 接下来，我们就需要判断是否需要缩放以及到底对宽还是高进行缩放。 
         * 如果高和宽不是全都超出了屏幕，那么无需缩放。 
         * 如果高和宽都超出了屏幕大小，则如何选择缩放呢》 
         * 这需要判断wRatio和hRatio的大小 
         * 大的一个将被缩放，因为缩放大的时，小的应该自动进行同比率缩放。 
         * 缩放使用的还是inSampleSize变量 
         */
        if (wRatio > 1 && hRatio > 1) {
            if (wRatio > hRatio) {
                op.inSampleSize = wRatio;
            } else {
                op.inSampleSize = hRatio;
            }
        }
        op.inJustDecodeBounds = false; //注意这里，一定要设置为false，因为上面我们将其设置为true来获取图片尺寸了  
        pic = BitmapFactory.decodeStream(context.getContentResolver()
                .openInputStream(imageFilePath), null, op);

        return pic;
    }

    public static String getfileinfo(String data) {
        String filename[] = data.split("/");
        if (filename != null) {
            return filename[filename.length - 2];
        }
        return null;
    }

    //保存图片到本地
    public static boolean save(Context context, Bitmap bitmap, String path, String fileName) throws Exception {
        File file = new File(path, fileName);
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            return false;
        }
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        BufferedOutputStream bs = new BufferedOutputStream(new FileOutputStream(file));
        bitmap.compress(CompressFormat.JPEG, 30, bs);
        bs.close();
        return true;
    }

    /**
     * 判断文件是否是图片
     *
     * @param path
     * @return
     * @throws IOException
     */
    public static boolean isImageFile(String path) throws IOException {

        Bitmap drawable = BitmapFactory.decodeFile(path);
        if (drawable == null) {
            Toast.makeText(BaseApplication.getContext(), "图片格式错误！", Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }
}
